4

何为REPL

wiki:

“读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL)是一个简单的,交互式的编程环境。

node.js官方文档(v0.12.2):

REPL既可以作为独立单机程序,也可以被其他的程序包含在内的程序。

它提供了一种交互方式,即“执行程序,展现结果”。

它可以被用作debuggingtesting 或者只是执行操作得到一些结果。

执行REPL

打开命令行,键入node

$ node
> 

然后就可以当开发环境使了

> var age = 12
undefined
> age
12


> function getAge(){
... console.log(this.age)
... }
undefined

> getAge()
12
undefined

因为REPL环境内部使用eval函数来评估该表达式的执行结果,所以有些东西我们可以直接这样写,如对象:

> {a:1,b:2}
{ a: 1, b: 2 }

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ]

下划线 _

使用_可以指代上一次的操作执行后的值,比如

对象:

> {a:1,b:2,c:3}
{ a: 1, b: 2, c: 3 }

> for(var key in _){
..... console.log('key : ' + key + ',value : ' + _[key]);
..... }

key : a,value : 1
key : b,value : 2
key : c,value : 3
//这里的_指代的是上一次执行操作后的对象

数组:

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ] 
> Object.keys(_)                        //这里的_指代的时上一次执行的数组
[ '0', '1', '2', '3', '4' ]             //获取index值

注意  下面的值不是我们的预期,因为_指代的已经不是原先的数组了!

> _.map(function(k){return _[k]*_[k]})  
[ 0, 1, 4, 9, 16 ]                      //获取元素值

正确的结果:

> [1,2,3,4,5]
[ 1, 2, 3, 4, 5 ]                       //数组
> Object.keys(_).map(function(k){return _[k]*_[k]})
[ 1, 4, 9, 16, 25 ]                     //元素值

内置REPL方法

一些REPL里的方法,通过键入.help可以看到:

> .help
break   Sometimes you get stuck, this gets you out
clear   Alias for .break
exit    Exit the repl
help    Show repl options
load    Load JS from a file into the REPL session
save    Save all evaluated commands in this REPL session to a file

.break & .clear

作用:中断当前的出入
你想退出你当前的输入环境,使用.break 或者 .clear

> function show(){
... console.log('');
... .clear           //.clear 或 .break
> 

.exit

作用:退出REPL ;快捷键:

control + c

直接退出REPL,回到命令行。

.save

将当前REPL中所有会话保存到文件中

> function sum(a,b){
... return a + b;
... }
undefined

> function substract(a,b){
... return a - b;
... }
undefined

> .save calculator.js
Session saved to:calculator.js

.load

加载文件进入到当前的REPL会话。

> .load calculator.js

> function sum(a,b){
... return a + b;
... }
undefined

> function substract(a,b){
... return a - b;
... }
undefined

> sum(3,5)
8

> substract(8,2)
6

最后扯几句

一门语言在运行的时候,需要一个环境,叫做宿主环境。对于JavaScript,宿主环境最常见的是web浏览器。

所以这时的this通常指代的时window

而在nodeREPL中,this指代的是global

> this
{ DTRACE_NET_SERVER_CONNECTION: [Function],
  DTRACE_NET_STREAM_END: [Function],
...

> this === global
true

REPL的优势在于:
- 可以debugging
- 做一些testing
- 快速的实践执行操作

done.

qianjiahao
8.4k 声望595 粉丝

居安思危,与君共勉。